
// function log<T> (value: T): T {
//     console.log(value);
//     return value;
// }
// log<string[]>(['a', 'b']);
// log([1, 2]);

//范型函数
// type Log = <T>(value: T) => T;
// let myLog: Log = log;

// interface Log<T>{
//     <T>(value: T): T;
// }
// let myLog: Log<number> = log;

class Log<T> {
    run(value: T){
        console.log(value);
        return value;
    }
}
let log1 = new Log<number>();
log1.run(2);
//在定义一个范型类的时候，如果不指定范型，那么这个范型就是any
let log2 = new Log();
log2.run('1');
log2.run({
    a: 1,
    b: 2
});

interface Length {
    length: number;
}
function log<T extends Length>(value: T): T{
    console.log(value.length);
    return value;
}
log('aaa');
log(['1', '2']);

